﻿using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.UI.Bovespa.Operador.Communication.Bovespa.Operador.Operador;
using Sinacor.Infra.UI.Common;

namespace Sinacor.UI.Bovespa.Operador.Communication.Translator.ModelToDataContract
{
    public class Operador
    {
        public Bovespa.Operador.Operador.PreferenciasRequest ToPreferenciasRequest(Model.Preferencias from)
        {
            Bovespa.Operador.Operador.PreferenciasRequest to = null;

            if (from != null)
            {
                to = new Bovespa.Operador.Operador.PreferenciasRequest();
                to.Bolsa = from.Bolsa;
                to.CodigoOperador = from.CodigoOperador;

                switch (from.Mercado)
                {
                    case Model.Enum.TipoMercado.BOX:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.BOX;
                        break;
                    case Model.Enum.TipoMercado.Estruturado:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.Estruturado;
                        break;
                    case Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.ExercicioOpcaoCompra;
                        break;
                    case Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.ExercicioOpcaoVenda;
                        break;
                    case Model.Enum.TipoMercado.Fracionario:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.Fracionario;
                        break;
                    case Model.Enum.TipoMercado.Futuro:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.Futuro;
                        break;
                    case Model.Enum.TipoMercado.Leilao:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.Leilao;
                        break;
                    case Model.Enum.TipoMercado.LeilaoNaoCotados:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.LeilaoNaoCotados;
                        break;
                    case Model.Enum.TipoMercado.OpcaoCompra:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.OpcaoCompra;
                        break;
                    case Model.Enum.TipoMercado.OpcaoVenda:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.OpcaoVenda;
                        break;
                    case Model.Enum.TipoMercado.Termo:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.Termo;
                        break;
                    case Model.Enum.TipoMercado.VencimentoFuturo:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.VencimentoFuturo;
                        break;
                    case Model.Enum.TipoMercado.Vista:
                        to.Mercado = Bovespa.Operador.Operador.TipoMercado.Vista;
                        break;

                }


                switch (from.Ordem)
                {
                    case Model.Enum.TipoOrdem.Administrada:
                        to.Ordem = Bovespa.Operador.Operador.TipoOrdem.Administrada;
                        break;
                    case Model.Enum.TipoOrdem.Casada:
                        to.Ordem = Bovespa.Operador.Operador.TipoOrdem.Casada;
                        break;
                    case Model.Enum.TipoOrdem.Discricionaria:
                        to.Ordem = Bovespa.Operador.Operador.TipoOrdem.Discricionaria;
                        break;
                    case Model.Enum.TipoOrdem.Financiamento:
                        to.Ordem = Bovespa.Operador.Operador.TipoOrdem.Financiamento;
                        break;
                    case Model.Enum.TipoOrdem.Limitada:
                        to.Ordem = Bovespa.Operador.Operador.TipoOrdem.Limitada;
                        break;
                    case Model.Enum.TipoOrdem.Mercado:
                        to.Ordem = Bovespa.Operador.Operador.TipoOrdem.Mercado;
                        break;
                    case Model.Enum.TipoOrdem.OnStop:
                        to.Ordem = Bovespa.Operador.Operador.TipoOrdem.OnStop;
                        break;
                }
                
                to.OrdemModoInsert = from.OrdemModoInsert;
                to.OrdenaDigitacaoDecrescente = from.OrdenaDigitacaoDecrescente;
                to.PopulaLoteAutomaticamenteAposInsercao = from.PopulaLoteAutomaticamenteAposInsercao;
                to.PopulaLoteAutomaticamenteAposPreBoleto = from.PopulaLoteAutomaticamenteAposPreBoleto;
                to.UtilizaDataPreBoleto = from.UtilizaDataPreBoleto;                  
            }

            return to;
        }

        #region ToFiltroCodigoOperadorRequest

        public FiltroCodigoOperadorRequest ToFiltroCodigoOperadorRequest(Model.Parameter.FiltroCodigoOperador from)
        {
            if (from == null) return null;

            return new FiltroCodigoOperadorRequest
            {
                Kernel = from.Kernel,
                Valor = from.Valor
            };
        }

        public List<FiltroCodigoOperadorRequest> ToFiltroCodigoOperadorRequest(ModelCollection<Model.Parameter.FiltroCodigoOperador> from)
        {
            if (from == null) return null;

            List<FiltroCodigoOperadorRequest> retorno = new List<FiltroCodigoOperadorRequest>();

            foreach (Model.Parameter.FiltroCodigoOperador item in from)
            {
                retorno.Add(new FiltroCodigoOperadorRequest
                {
                    Kernel = item.Kernel,
                    Valor = item.Valor
                });
            }
            return retorno;
        }

        #endregion

        #region ToFiltroOperadorRequest

        public FiltroOperadorRequest ToFiltroOperadorRequest(Model.Parameter.FiltroOperador from)
        {
            if (from == null) return null;

            return new FiltroOperadorRequest
            {
                CodigoOperador = from.CodigoOperador,
                CodigoOperadorMegaBolsa = from.CodigoOperadorMegaBolsa,
                CodigoOperadorRendaFixa = from.CodigoOperadorRendaFixa,
                IndicadorDesprezaOperadorSinalOfertasMegaBolsa = from.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                IndicadorOperadorHomeBroker = from.IndicadorOperadorHomeBroker,
                IndicadorPontaMesa = from.IndicadorPontaMesa,
                LoginOperador = from.LoginOperador,
                NomeOperador = from.NomeOperador,
                Bloqueado = from.Bloqueado
            };
        }

        public List<FiltroOperadorRequest> ToFiltroOperadorRequest(ModelCollection<Model.Parameter.FiltroOperador> from)
        {
            if (from == null) return null;

            List<FiltroOperadorRequest> retorno = new List<FiltroOperadorRequest>();

            foreach (Model.Parameter.FiltroOperador item in from)
            {
                retorno.Add(new FiltroOperadorRequest
                {
                    CodigoOperador = item.CodigoOperador,
                    CodigoOperadorMegaBolsa = item.CodigoOperadorMegaBolsa,
                    CodigoOperadorRendaFixa = item.CodigoOperadorRendaFixa,
                    IndicadorDesprezaOperadorSinalOfertasMegaBolsa = item.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                    IndicadorOperadorHomeBroker = item.IndicadorOperadorHomeBroker,
                    IndicadorPontaMesa = item.IndicadorPontaMesa,
                    LoginOperador = item.LoginOperador,
                    NomeOperador = item.NomeOperador,
                    Bloqueado = item.Bloqueado
                });
            }
            return retorno;
        }

        #endregion

        #region ToOperadorRequest

        public OperadorRequest ToOperadorRequest(Model.Operador from)
        {
            if (from == null) return null;

            return new OperadorRequest
            {
                CodigoOperador = from.CodigoOperador,
                CodigoOperadorMegaBolsa = from.CodigoOperadorMegaBolsa,
                CodigoOperadorRendaFixa = from.CodigoOperadorRendaFixa,
                IndicadorDesprezaOperadorSinalOfertasMegaBolsa = from.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                IndicadorOperadorHomeBroker = from.IndicadorOperadorHomeBroker,
                IndicadorPontaMesa = from.IndicadorPontaMesa,
                LoginOperador = from.LoginOperador,
                NomeOperador = from.NomeOperador,
                Bloqueado = from.Bloqueado
            };
        }

        public List<OperadorRequest> ToOperadorRequest(ModelCollection<Model.Operador> from)
        {
            if (from == null) return null;

            List<OperadorRequest> retorno = new List<OperadorRequest>();

            foreach (Model.Operador item in from)
            {
                retorno.Add(new OperadorRequest
                {
                    CodigoOperador = item.CodigoOperador,
                    CodigoOperadorMegaBolsa = item.CodigoOperadorMegaBolsa,
                    CodigoOperadorRendaFixa = item.CodigoOperadorRendaFixa,
                    IndicadorDesprezaOperadorSinalOfertasMegaBolsa = item.IndicadorDesprezaOperadorSinalOfertasMegaBolsa,
                    IndicadorOperadorHomeBroker = item.IndicadorOperadorHomeBroker,
                    IndicadorPontaMesa = item.IndicadorPontaMesa,
                    LoginOperador = item.LoginOperador,
                    NomeOperador = item.NomeOperador,
                    Bloqueado = item.Bloqueado
                });
            }
            return retorno;
        }

        #endregion

        #region ToOperadorXSubordinadosRequest

        public OperadorXSubordinadosRequest ToOperadorXSubordinadosRequest(Model.OperadorXSubordinados from)
        {
            if (from == null) return null;

            return new OperadorXSubordinadosRequest
            {
                CodigoOperador = from.CodigoOperador,
                Subordinados = from.Subordinados
            };
        }

        #endregion

        #region ToOrigemRequest

        public OrigemRequest ToOrigemRequest(Model.Origem from)
        {
            if (from == null) return null;

            return new OrigemRequest
                   {
                       Corretora = from.Corretora,
                       OperadorOrigem = from.OperadorOrigem,
                       OperadorReceptor = from.OperadorReceptor
                   };
        }

        public List<OrigemRequest> ToOrigemRequest(ModelCollection<Model.Origem> from)
        {
            if (from == null) return null;

            List<OrigemRequest> retorno = new List<OrigemRequest>();

            foreach (Model.Origem item in from)
            {
                retorno.Add(new OrigemRequest
                {
                    Corretora = item.Corretora,
                    OperadorOrigem = item.OperadorOrigem,
                    OperadorReceptor = item.OperadorReceptor
                });
            }
            return retorno;
        }

        #endregion

        #region ToOrigemAnteriorAtualRequest

        public OrigemAnteriorAtualRequest ToOrigemAnteriorAtualRequest(Model.OrigemAnteriorAtual from)
        {
            if (from == null) return null;

            return new OrigemAnteriorAtualRequest
            {
                Anterior = new OrigemRequest()
                {
                    Corretora = from.Anterior.Corretora,
                    OperadorOrigem = from.Anterior.OperadorOrigem,
                    OperadorReceptor = from.Anterior.OperadorReceptor
                },

                Atual = new OrigemRequest()
                {
                    Corretora = from.Atual.Corretora,
                    OperadorOrigem = from.Atual.OperadorOrigem,
                    OperadorReceptor = from.Atual.OperadorReceptor
                }
            };
        }

        #endregion
    }
}
